// 云函数入口文件
const cloud = require('wx-server-sdk')

// 初始化 cloud
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 获取数据库引用
const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  console.log('登录云函数接收到的事件:', event)
  
  const wxContext = cloud.getWXContext()
  
  try {
    // 获取用户 openid 和 unionid
    const { OPENID, UNIONID, APPID } = wxContext
    
    // 获取前端传来的用户信息
    const { userInfo } = event
    
    if (!userInfo) {
      return {
        success: false,
        message: '缺少用户信息参数'
      }
    }
    
    // 检查用户是否已存在
    const userCollection = db.collection('users')
    const existingUser = await userCollection.where({
      openId: OPENID
    }).get()
    
    const currentTime = new Date().toISOString().replace('T', ' ').substring(0, 19)
    
    let userData = {
      openId: OPENID, // 明确存储openId字段
      unionId: UNIONID,
      lastLoginTime: currentTime
    }
    
    let finalUserInfo = {}
    
    if (existingUser.data.length === 0) {
      // 新用户，创建记录，使用微信提供的信息
      userData.nickName = userInfo.nickName
      userData.avatarUrl = userInfo.avatarUrl
      userData.createTime = currentTime
      userData.isAdmin = false
      
      await userCollection.add({
        data: userData
      })
      
      finalUserInfo = {
        nickName: userInfo.nickName,
        avatarUrl: userInfo.avatarUrl,
        openId: OPENID,
        unionId: UNIONID
      }
      
      console.log('新用户创建成功:', OPENID)
    } else {
      // 老用户，更新登录时间，但保留已有的昵称和头像
      const existingUserData = existingUser.data[0]
      
      // 只更新登录时间和unionId，保留用户自定义的昵称和头像
      await userCollection.where({
        openId: OPENID
      }).update({
        data: {
          unionId: UNIONID,
          lastLoginTime: currentTime
        }
      })
      
      // 返回数据库中已保存的用户信息
      finalUserInfo = {
        nickName: existingUserData.nickName,
        avatarUrl: existingUserData.avatarUrl,
        openId: OPENID,
        unionId: UNIONID
      }
      
      console.log('用户登录成功，保留已有资料:', OPENID)
      console.log('返回的用户信息:', finalUserInfo)
    }
    
    console.log('最终返回的用户信息:', finalUserInfo)
    
    // 返回用户信息
    return {
      success: true,
      data: {
        openId: OPENID,
        unionId: UNIONID,
        appId: APPID,
        userInfo: finalUserInfo
      },
      message: '登录成功'
    }
  } catch (error) {
    console.error('登录云函数执行失败:', error)
    return {
      success: false,
      message: '登录失败，请重试',
      error: error.message
    }
  }
} 